ElasticSearch相似度匹配及分词器选择 |
您所在的位置:网站首页 › elasticsearch 正则查询 › ElasticSearch相似度匹配及分词器选择 |
目录 ES核心相似度匹配逻辑: 分词器选择: IK 分词器 分词器使用演示: ik分词器最佳实践: 使用minimum_should_match 正向匹配度-使用个数 正向匹配度-使用百分比 逆向匹配 组合匹配(Combination) ES核心相似度匹配逻辑:ES的核心相似度匹配逻辑,或者匹配目的,可以不是很严谨的用以下两句话承载。 局部常见:该单词在文档中多次出现全局罕见:该单词在语料库中出现的次数并不多。详见:Elasticsearch中的相似度评分机制_chenxy02的博客-CSDN博客_elasticsearch 相似度 分词器选择:ES相似度匹配的结果与所选择的分词器类别息息相关,常见的分词器如下: Standard:单字切分法,一个字(对于英文为一个单词)切分成一个词,ES默认内置分词器。CJKAnalyzer: 二元切分法, 把相邻的两个字, 作为一个词。SmartChineseAnalyzer: 对中文支持较好, 但是扩展性差, 针对扩展词库、停用词均不好处理。Whitespace分词器:去除空格,不支持中文,对生成的词汇单元不进行其他标准化处理。language分词器:特定语言的分词器,不支持中文。IK-analyzer: 在做中文搜索时,最受欢迎的分词器,支持自定义词库。 IK 分词器IK分词器有两种分词模式:ik_max_word和ik_smart模式。 1、ik_max_word 会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。 2、ik_smart 会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。 分词器使用演示:使用es内置standard分词算法: 使用ik_max_word分词算法: 使用ik_smart分词算法: 关于做中文检索时,使用分词器的最佳实践业界有两种说法: 1、索引时用ik_max_word,在搜索时用ik_smart。即:索引时最大化的将文章内容分词,搜索时更精确的搜索到想要的结果。 2、创建mapping时指定分词器和查询事指定的分词器,保持一致。 使用minimum_should_match这一部分我们使用的实验数据为: POST similarity-score/_doc/_bulk {"index":{}} {"text":"what is your birthday"} {"index":{}} {"text":"nothing is impossible"} {"index":{}} {"text":"Blue sky"} {"index":{}} {"text":"good morning"}ElasticSearch query中的minimum_should_match,最小匹配度。它有很多种配置方式。 正向匹配度-使用个数比如 "minimum_should_match":3 官方原文解释是:Indicates a fixed value regardless of the number of optional clauses。 这里要说明一下为什么是optional clauses(翻译为可选的子句),因为对于被analyzer分解出来的每一个term都会构造成一个should的bool query的查询,每个term变成一个term query子句。 比如 "query": "what is your",会被解析成: { "bool": { "should": [ { "term": { "body": "what"}}, { "term": { "body": "is"}}, { "term": { "body": "your"}} ], "minimum_should_match": 3 } }不使用 "minimum_should_match"的情况: 使用 "minimum_should_match:2"的情况: 比如"minimum_should_match":75%,可以配置一个一个百分比,至少optional clauses至少满足75%,这里是向下取整的。 比如有5个clause,5*75%=3.75,向下取整为3,也就是至少需要match 3个clause。 注意:由于是向下取整,所以尤其针对短的query,我们把"minimum_should_match"设为大于100% 还是可以得到结果(如下,130*3=3.90,向下取整为3) 逆向匹配和正向匹配相反,比如我们可以近似理解为-25%和75%表示的是一个意思,但是有些小小的差异,比如有5个clause,逆向匹配-25%,5*25%=1.25,取整是1,5-1=4,即要匹配4个clause,而75%算出来是3个clause。 组合匹配(Combination)比如,"minimum_should_match": 3 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |